package slxy.jiangtao.dts.service.sys;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import slxy.jiangtao.dts.core.common.service.CommonService;
import slxy.jiangtao.dts.core.util.FileUtil;
import slxy.jiangtao.dts.core.util.StringUtil;
import slxy.jiangtao.dts.entity.sys.SystemFiles;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
 * Code must be sexy
 * Created by Jiang Tao on 2017/5/2.
 * 说明：
 */
@Service("systemFileService")
public class SystemFileService {
    @Autowired
    CommonService commonService;
    /**
     * @param fileNos 以逗号隔开的文件no字符串
     */
    public List<SystemFiles> getFiles(String fileNos) {
        List<SystemFiles> systemFilesList = new ArrayList<>();
        if (StringUtil.isNotEmpty(fileNos)) {
            Arrays.stream(fileNos.substring(1).split(",")).forEach(
                    fileNo -> {
                        SystemFiles systemFiles = commonService.get(SystemFiles.class, fileNo);
                        Optional.ofNullable(systemFiles).ifPresent(
                                systemFile -> systemFilesList.add(systemFile)
                        );
                    }
            );
        }
        return systemFilesList;
    }

    /**
     * 根据文件编号删除系统文件
     * @param fileNos 已","开始并以此作为分隔符的多个文件编号组成的字符串
     */
    public void deleteFileByNoS(String fileNos){
        if (StringUtil.isNotEmpty(fileNos)) {
            Arrays.stream(fileNos.substring(1).split(",")).forEach(
                    fileNo -> {
                        SystemFiles systemFiles = commonService.get(SystemFiles.class, fileNo);
                        FileUtil.deleteFile(systemFiles.getLocalPath() + File.separator + systemFiles.getName());//删除本地保存的此文件
                        commonService.delete(systemFiles);
                    }
            );
        }
    }

    /**
     * 根据文件编号删除系统文件
     * @param fileNo 当个文件编号
     */
    public void deleteFileByNo(String fileNo) {
        if (StringUtil.isNotEmpty(fileNo)){
            SystemFiles systemFiles = commonService.get(SystemFiles.class, fileNo);
            Optional.ofNullable(systemFiles).ifPresent(
                    systemFile -> {
                        FileUtil.deleteFile(systemFiles.getLocalPath() + File.separator + systemFiles.getName());//删除本地保存的此文件
                        commonService.delete(systemFile);
                    }
            );
        }
    }

    /**
     * 根据文件编号删除系统文件(此方法只适用于保存的文件名于文件编号相同)
     * @param fileNo 当个文件编号
     */
    public void deleteFileWordAndHtml(String fileNo) throws FileNotFoundException{
        if (StringUtil.isNotEmpty(fileNo)){
            SystemFiles systemFiles = commonService.get(SystemFiles.class, fileNo);
            Optional.ofNullable(systemFiles).ifPresent(
                    systemFile -> {
                        FileUtil.deleteFile(systemFiles.getLocalPath() + File.separator + systemFiles.getNo()+"."+systemFile.getSuffix());//删除本地保存的word文件
                        FileUtil.deleteFile(systemFiles.getLocalPath() + File.separator + systemFiles.getNo()+".html");//删除本地保存的html文件
                        FileUtil.deleteDirectory(systemFiles.getLocalPath() + File.separator + systemFiles.getNo()+".files");//删除本地保存的html文件图片文件夹
                        commonService.delete(systemFile);
                    }
            );
        }
    }
}
